package presentation;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import dao.ComisionDAO;
import dao.PremioDAO;
import dao.ProductoDAO;
import model.Comision;
import model.Premio;
import model.Producto;
import services.ValidacionesServicio;

/**
 * Servlet implementation class ActualizarPremiosServlet
 */
@WebServlet("/ActualizarPremiosServlet")
public class ActualizarPremiosServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public PremioDAO premiosService = null;
	public ComisionDAO comisionesService = null;
	public ProductoDAO productosService = null;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public ActualizarPremiosServlet() {
		super();

	}
	@Override
	public void init(ServletConfig config) {
		WebApplicationContext context = WebApplicationContextUtils
				.getRequiredWebApplicationContext(config.getServletContext());
		this.premiosService = (PremioDAO) context.getBean(PremioDAO.class);
		this.comisionesService = (ComisionDAO) context.getBean(ComisionDAO.class);
		this.productosService = (ProductoDAO) context.getBean(ProductoDAO.class);

	}
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		List<Premio> premios = this.premiosService.getAll();
		request.getSession().setAttribute("Premios", premios);
		List<Comision> comisiones = this.comisionesService.getAll();
		request.getSession().setAttribute("Comisiones", comisiones);
		List<Producto> productos = this.productosService.getAll();
		request.getSession().setAttribute("ComisionesProductos", productos);
		request.getSession().setAttribute("MensajeActualizarPremios", null);
		response.sendRedirect("actualizarPremiosYComisiones.jsp");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String mensaje = null;

		if (request.getParameter("btnPremios") != null) {
			try {
				if (!ValidacionesServicio
						.validarInteger(request.getParameter("ListaProductosPremios"))) {

					mensaje = "Error en el monto del premio a actualizar!";

					return;
				}

				if (!ValidacionesServicio
						.validarInteger(request.getParameter("inputMontoPremios"))) {

					mensaje = "Error en el monto del premio a actualizar!";

					return;
				}

				Integer monto = Integer.parseInt(request.getParameter("inputMontoPremios"));

				String premio_string = request.getParameter("ListaProductosPremios");

				Premio premio = this.premiosService.getById(Integer.parseInt(premio_string));

				premio.setValor(monto);

				this.premiosService.update(premio);
				mensaje = "Premio actualizado correctamente!";
			} catch (Exception e) {
				mensaje = "Error al actualizar el premio.";
			}

		}

		if (request.getParameter("btnComisiones") != null) {
			try {
				if (!ValidacionesServicio.validarInteger(request.getParameter("ListaComisiones"))) {
					mensaje = "Error en seleccionar la comision a actualizar!";

					return;
				}

				if (!ValidacionesServicio
						.validarInteger(request.getParameter("inputMontoComisiones"))) {

					mensaje = "Error en el monto de la comision a actualizar!";

					return;
				}

				Integer monto = Integer.parseInt(request.getParameter("inputMontoComisiones"));

				String comision_string = request.getParameter("ListaComisiones");

				Comision comision = this.comisionesService
						.getById(Integer.parseInt(comision_string));

				comision.setValor(monto);

				this.comisionesService.update(comision);
				mensaje = "Comision actualizada correctamente!";
			} catch (Exception e) {
				mensaje = "Error al actualizar la comision.";

			}

		}

		if (request.getParameter("btnComisionesProductos") != null) {
			try {
				if (!ValidacionesServicio
						.validarInteger(request.getParameter("ListaComisionesProductos"))) {

					mensaje = "Error en seleccionar la comision a actualizar!";

					return;
				}

				if (!ValidacionesServicio
						.validarInteger(request.getParameter("inputMontoComisionesProductos"))) {

					mensaje = "Error en el monto de la comision a actualizar!";

					return;
				}

				Integer monto = Integer
						.parseInt(request.getParameter("inputMontoComisionesProductos"));

				String producto_string = request.getParameter("ListaComisionesProductos");
				Producto producto = this.productosService
						.getById(Integer.parseInt(producto_string));
				producto.setAdicional(monto);

				this.productosService.update(producto);

				mensaje = "Comision actualizado correctamente!";
			} catch (Exception e) {
				mensaje = "Error al actualizar la comision.";
			}

		}
		List<Premio> premios = this.premiosService.getAll();
		request.getSession().setAttribute("Premios", premios);
		List<Comision> comisiones = this.comisionesService.getAll();
		request.getSession().setAttribute("Comisiones", comisiones);
		List<Producto> productos = this.productosService.getAll();
		request.getSession().setAttribute("ComisionesProductos", productos);
		request.getSession().setAttribute("MensajeActualizarPremios", mensaje);
		response.sendRedirect("actualizarPremiosYComisiones.jsp");
	}

}
